std:: quailfy the calls for cend/crend/cbegin/cend. Fixes bug 28927. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@278282 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/iterator b/include/iterator index abd142e..0caabbb 100644 --- a/include/iterator +++ b/include/iterator 
@@ -1632,16 +1632,16 @@    template <class _Cp>  inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 -auto cbegin(const _Cp& __c) -> decltype(begin(__c)) +auto cbegin(const _Cp& __c) -> decltype(_VSTD::begin(__c))  { - return begin(__c); + return _VSTD::begin(__c);  }    template <class _Cp>  inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 -auto cend(const _Cp& __c) -> decltype(end(__c)) +auto cend(const _Cp& __c) -> decltype(_VSTD::end(__c))  { - return end(__c); + return _VSTD::end(__c);  }    template <class _Cp> @@ -1674,16 +1674,16 @@    template <class _Cp>  inline _LIBCPP_INLINE_VISIBILITY -auto crbegin(const _Cp& __c) -> decltype(rbegin(__c)) +auto crbegin(const _Cp& __c) -> decltype(_VSTD::rbegin(__c))  { - return rbegin(__c); + return _VSTD::rbegin(__c);  }    template <class _Cp>  inline _LIBCPP_INLINE_VISIBILITY -auto crend(const _Cp& __c) -> decltype(rend(__c)) +auto crend(const _Cp& __c) -> decltype(_VSTD::rend(__c))  { - return rend(__c); + return _VSTD::rend(__c);  }    #endif 
diff --git a/test/std/iterators/iterator.range/begin-end.fail.cpp b/test/std/iterators/iterator.range/begin-end.fail.cpp new file mode 100644 index 0000000..1a14930 --- /dev/null +++ b/test/std/iterators/iterator.range/begin-end.fail.cpp 
@@ -0,0 +1,51 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "test_macros.h" + +#if TEST_STD_VER < 11 +#error +#else + +// <iterator> +// template <class C> auto begin(C& c) -> decltype(c.begin()); +// template <class C> auto begin(const C& c) -> decltype(c.begin()); +// template <class C> auto end(C& c) -> decltype(c.end()); +// template <class C> auto end(const C& c) -> decltype(c.end()); +// template <class E> reverse_iterator<const E*> rbegin(initializer_list<E> il); +// template <class E> reverse_iterator<const E*> rend(initializer_list<E> il); + + +#include <iterator> +#include <cassert> + +namespace Foo { +	struct FakeContainer {}; +	typedef int FakeIter; + +	FakeIter begin(const FakeContainer &) { return 1; } +	FakeIter end (const FakeContainer &) { return 2; } +	FakeIter rbegin(const FakeContainer &) { return 3; } +	FakeIter rend (const FakeContainer &) { return 4; } + +	FakeIter cbegin(const FakeContainer &) { return 11; } +	FakeIter cend (const FakeContainer &) { return 12; } +	FakeIter crbegin(const FakeContainer &) { return 13; } +	FakeIter crend (const FakeContainer &) { return 14; } +} + + +int main(){ +// Bug #28927 - shouldn't find these via ADL +	(void) std::cbegin (Foo::FakeContainer()); +	(void) std::cend (Foo::FakeContainer()); +	(void) std::crbegin(Foo::FakeContainer()); +	(void) std::crend (Foo::FakeContainer()); +} +#endif